Repository navigation
pm-dispatch: an open PR names its owner — pr_create assigns the claim's Account, a hand-over re-assigns it, and H76 reports an unowned PR - #30796
Conversation
…'s Account, a hand-over re-assigns it, and H76 reports an unowned PR Ruling record 6674390671 (letter A) on #29828. The dev's pr_create now carries the claim's Account as the PR's assignee (os-dev.md rule 2 and the write budget), the 认领 line in execution-duties.md says a hand-over re-assigns it in the same stroke as the claim change, SKILL.md's hand-off step keeps only "never request the seat's own account", and the runbook's thread rule names the card's assignee. check-half-states gains H76, a report-only state row: an open non-mailbox PR with no assignee. Claude-Session: https://claude.ai/code/session_016WV4d1MNyKiUFDBccFX8Cc Co-authored-by: Claude <noreply@anthropic.com>
|
domain:skills#1 · os-elon-musk · session_016WV4d1mkgEris4MHHLjtnk Contract-review-claim: session_016WV4d1mkgEris4MHHLjtnk · head bcc6eae · 2026-11-06T03:29Z |
|
domain:skills#1 · os-elon-musk · session_016WV4d1mkgEris4MHHLjtnk Contract reviewServed-tier: ① Derived judgments
② Semver levelNone — no package touched (paths are ③ Boundary flags
④ Design judgment
No must-fix. No should-fix. Implemented-by: VERDICT: PASS Generated by Claude Code |
|
domain:skills#1 · os-elon-musk · session_016WV4d1mkgEris4MHHLjtnk 维护者速读
席位核对 — ACCEPT · head bcc6eae
Generated by Claude Code |
Requested by Elon · project thread
domain:skills#1 · os-elon-musk · session_016WV4d1MNyKiUFDBccFX8Cc
Fixes #29828
Clause-②: no
Metadata-protocol: none
维护者速读
pr_create开 PR 时就把处理人挂成认领评论里的Account:(即卡的处理人);换手(兄弟席接管、释放、改派)与认领变更同笔改 PR 处理人;交棒请审时仍 ⛔ 不请席位自己的账号。半状态巡查新增 H76 行:开着的、非信箱 PR 没有处理人就列出来(只报告,不是门禁)。.claude/**规则文本(Tier S)与scripts/pm/巡查工具,不发布(skip-changeset)。中继本来就支持pr_create带assignees,不改代码。H76 不写任何标签、处理人或评论,不挡合并。各规则文件行数不变、每行仍在 120 字节内,未抬任何上限。回滚即 revert。.claude/skills/pm-dispatch/references/execution-duties.md认领节第 69 行(规则本体与换手同笔);②scripts/pm/check-half-states.mjs的h76OpenPrWithoutAssignee与 sweep 里的接线;③.claude/skills/pm-dispatch/SKILL.md第 198–199 行(交棒请审只留「不请席位自身账号」)。node scripts/pm/check-half-states.mjs --self-test,末行电池清单里应见H76 unowned open PR 12/11,并以 0 退出。What changes
Ruling record 6674390671 (letter A, maintainer 「按推荐裁」) on #29828, encoded in the three texts it names plus every restatement found under
.claude/**:.claude/agents/os-dev.mdrule 2 (L38): the PR's assignee is the claim'sAccount:, carried bypr_create; a hand-over is the seat's. Was 「PR ⛔ 不带assignees(中继虽收),席位交棒才派」..claude/agents/os-dev.mdwrite budget (L62):pr_createcarries labels and assignees. Was 「⛔ 无 assignees」..claude/skills/pm-dispatch/references/execution-duties.md认领 (L69; L67 at1371b9d8): the PR is assigned to the claim's account and a hand-over re-assigns it in the same stroke. Was 「PR ⛔ 不派席位账号」..claude/skills/pm-dispatch/SKILL.mdhand-off step ③ (L198-199): 「⛔ 永不派/请席位自身账号」 keeps only the request half (the ruling replaces the assign half alone; a review request to the seat's own account stays forbidden); 「pr_create不请不派」 becomes 「pr_create派不请」..claude/skills/pm-dispatch/references/dispatch-runbook.md(L140): a card thread does not write the CARD's assignee — the PR's is now written by itspr_create.scripts/pm/check-half-states.mjs: row H76, report-only, bandstate(H1's): an open PR with no assignee, apm:mailboxPR excepted. The mailbox label ismailbox-open.mjs'sMAILBOX_LABEL, imported lazily as H72 does; when it cannot be loaded every unowned PR fires UNJUDGED, never clean. Drafts are included. Free: it reads the open listing the sweep already holds. ⛔ No gate wiring.Every file keeps its line count (each edit rewrites its own line in place) and every touched line stays within the 120-byte line budget; no ceiling moved.
Tests
node scripts/pm/check-half-states.mjs --self-test: new batteryH76 unowned open PR(12 cases, pin 11): the firing, a ready PR firing like a draft, the assignee exemption (list field and legacy single field), the mailbox exemption beside its unlabelled twin, closed and missing rows, the unread-label UNJUDGED leg for null / undefined / empty, an assigned PR staying clean with the label unread, not-loud, band + emitted, the lazy-import wiring, the roster floor.pm:mailboxPRs exempt, 39 would fire H76.Acceptance notes
scripts/pm/fleet-write/validate.mjsacceptsassigneesonpr_create(its own self-test pins the shape) andops.mjssends it as the second leg. Two relay COMMENTS still restate the old rule — theops.mjsheader (L103-105, "a dev'spr_createcarries noassigneesat all") and thepr_createrow comment (L2093-2094). They are outside this card's surface while PR feat(pm): the relay deletes a closed mailbox's claude/mailbox-* head, and mailbox-open --close sends it in the close stroke #30782 editsops.mjs; carrier: the seat's relay-docs follow-up card.AGENTS.mdL403-404 restates the old rule ("nor the PR's:pr_createcarries none; the seat sets it at hand-over").AGENTS.mdis Tier H and outside this card's surface; carrier: the seat files it.execute.mjs,pr_ready) and H43 count an ASSIGNED approver as covered. A claim'sAccount:is never aGOVERNED_APPROVERSaccount by rule (SKILL.md: an approval account never sits a seat), so the new assignee cannot mask a review request; noted because one open card (Scenario library T3/T4: local Claude Code runner — Build, Run (问数 + operations per persona over the app's MCP), Iterate — writing run records, zero cloud-billed tokens #30292) carries an approver account as assignee — its PR is not on a governed path today.Verification
Local subset, recorded as
COMMAND :: exit CODEand reconciled withnode scripts/pm/dispatch-gates.mjs --ran FILE --repo objectstack-ai/objectstack:7c76c755(this change before theorigin/mainmerge): all 58 derived families exit 0, reconciliation 58 derived / 58 run / 0 NOT-MEASURED;pnpm lintexit 0. That run includescheck:pm-half-states,check:pm-skill-ratchet,check:pm-skill-id-lint,check:pm-governed-prose,check:skill-frame-sync,check:doc-authoringandcheck:pm-dispatch-gates.origin/main(bringing in PR pm-dispatch: a platform defect is fixed in the platform — the claim names the carrier repo, os-dev stops on a platform premise, and H75 flags a PR whose cross-repo premise closed after it opened #30778, which also editsos-dev.md,SKILL.mdandcheck-half-states.mjs); the branch's delta againstmainis byte-identical (5 files, +92 / -6). The same 58 families are re-run on that head; their record is in the os-dev report on [Decision] PR assignee: an open PR names its owner — assign it to the claiming seat's account at pr_create (os-dev.md L38/L62 and execution-duties.md L67 forbid it today)? #29828.Human Minimum
packages/specholds no runtime logic. (No schema touched.)pnpm lintpasses.main, one pull request.skip-changeset.)packages/spectouched: its generated artifacts are regenerated and committed. (Not touched.)content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.Generated by Claude Code